@echo off
setlocal enabledelayedexpansion

:: ========== 初始化设置 ==========
:: 设置控制台编码为UTF-8
chcp 65001 >nul

:: ========== 变量定义 ==========
:: 获取标准化脚本路径（去除尾部反斜杠）
for %%I in ("%~dp0.") do set "SCRIPT_DIR=%%~fI"
set "INSTALL_DIR=%SCRIPT_DIR%\cg.exe"
set "ENV_VAR_NAME=CONGGE_EXE"

:: ========== 用户PATH处理 ==========
echo [操作] 正在处理用户PATH环境变量...

:: 方法1：使用setx直接获取当前用户PATH（更可靠）
for /f "delims=" %%P in ('setx Path 2^>nul ^| find "="') do (
    for /f "tokens=2,* delims==" %%A in ("%%P") do (
        set "USER_PATH=%%A"
    )
)

:: 方法2：备用方法通过reg查询
if not defined USER_PATH (
    for /f "tokens=1,2* delims= " %%A in ('reg query "HKCU\Environment" /v Path 2^>nul ^| find /i "Path"') do (
        set "USER_PATH=%%C"
    )
)

:: 处理PATH为空的情况
if not defined USER_PATH set "USER_PATH="

:: 标准化PATH格式（去除首尾分号）
set "CLEAN_PATH=%USER_PATH%"
if defined CLEAN_PATH (
    if "!CLEAN_PATH:~0,1!"==";" set "CLEAN_PATH=!CLEAN_PATH:~1!"
    if "!CLEAN_PATH:~-1!"==";" set "CLEAN_PATH=!CLEAN_PATH:~0,-1!"
    set "CLEAN_PATH=!CLEAN_PATH:;;=;!"
)

:: 检查并追加当前目录
echo "!CLEAN_PATH!" | find /i "%SCRIPT_DIR%" >nul
if %errorLevel% neq 0 (
    if "!CLEAN_PATH!"=="" (
        set "NEW_PATH=%SCRIPT_DIR%"
    ) else (
        set "NEW_PATH=!CLEAN_PATH!;%SCRIPT_DIR%"
    )
    
    echo [操作] 正在追加目录到用户PATH: %SCRIPT_DIR%
    setx Path "!NEW_PATH!" >nul 2>&1
    
    if %errorLevel% equ 0 (
        echo [成功] 用户PATH更新完成
        echo [提示] 新PATH将在新终端中生效
    ) else (
        echo [错误] 用户PATH更新失败
    )
) else (
    echo [信息] 目录已在用户PATH中: %SCRIPT_DIR%
)

:: ========== 系统环境变量设置 ==========
:: 检查管理员权限
net session >nul 2>&1
if %errorLevel% neq 0 (
    echo [信息] 正在请求管理员权限设置系统变量...
    powershell -Command "Start-Process cmd -ArgumentList '/c chcp 65001>nul && %~0' -Verb RunAs"
    exit /b
)

:: 设置系统变量（需要管理员权限）
if exist "%INSTALL_DIR%" (
    echo [操作] 正在设置系统环境变量 %ENV_VAR_NAME%...
    reg add "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v "%ENV_VAR_NAME%" /d "%INSTALL_DIR%" /f >nul 2>&1
    
    if %errorLevel% equ 0 (
        powershell -Command "[System.Environment]::SetEnvironmentVariable('%ENV_VAR_NAME%', '%INSTALL_DIR%', 'Machine')" >nul 2>&1
        echo [成功] 系统变量设置完成: %ENV_VAR_NAME%=%INSTALL_DIR%
    ) else (
        echo [错误] 系统变量设置失败！
    )
) else (
    echo [警告] 目标文件不存在: %INSTALL_DIR%
)

:: ========== 最终报告 ==========
echo.
echo [操作报告]
echo 用户PATH操作: %SCRIPT_DIR% %errorlevel_UserPath%
echo 系统变量设置: %ENV_VAR_NAME%=%INSTALL_DIR% %errorlevel_SystemVar%
echo.
pause